#ifndef _TYPEDEF_H_
#define _TYPEDEF_H_

typedef struct _RTC_CLOCK				 //数据格式均为BCD 数
{                              
unsigned char Second;                //秒			   0
unsigned char Minute;                //分			   1
unsigned char Hour;                  //小时			   2
unsigned char Week;                  //星期			   3
unsigned char Day;                   //日			   4
unsigned char Month;                 //月			   5
unsigned char Year_L;                //年的低位字节	   6
unsigned char Year_H;                //年的高位字节	   7
}RTC_CLOCK, *PRTC_CLOCK;

/*
**************************************************************************************************************
*【11】GPS站点相关的
**************************************************************************************************************
*/

typedef struct
{
	U16 SiteID;							//站点编号
	U08 SiteNo;							//站点序号 
	U08 Stat;							//上行下行状态,1:上行，2:下行，3:上下行
	U08 Longitude[5];					//经度 sdddmm.mmmm
	U08	Latitude[5];					//纬度 s0ddmm.mmmm
}__GInfo;
typedef struct
{
	U08	SiteNum; 						//站点数 最大值为DEF_UseGPS_InfoMaxNum
	U08 Ver[4];							//版本号
	
	__GInfo	Info[DEF_UseGPS_InfoMaxNum];//站点信息
}__GpsInfo;								//GPS站点信息

typedef struct
{
//	U08 UpNo;							//上车站点序号, 段收费，此字段代表起始站数
//	U08 DownNo;							//下车站点序号, 段收费，此字段代代表结束站数

	U16 UpCode;							//上车站点编号
	U16 DownCode;						//下车站点编号

	U16 UnitPrice;						//票价
}__GpsUnitPrice;

typedef struct
{
	U08	UnPrNum; 						//站点数 最大值为DEF_UseGPS_InfoMaxNum
	U08 Ver[4];							//版本号
	
	__GpsUnitPrice	GpsUnitPrice[DEF_UseGPS_UnPrMaxNum];
	
}__GpsUnPr;								//GPS站点间票价信息

typedef struct
{
	U32 AllDistance;					//当前行驶距离 单位米 总距离
	U08 Longitude[5];					//当前经度 sdddmm.mmmm
	U08	Latitude[5];					//当前纬度 s0ddmm.mmmm
	U16 SiteID;							//当前站点编号
	U08 SiteNo;							//当前站点序号	这里的与GPS信息里的不一样
	U08 UD_Stat;						//上，下行标识，1:上行，2:下行，0:获取中
	
	U08 Time[8];						//当前时间
	
}__GpsCurInfo;

/*
**************************************************************************************************************
*【08】银行bin号
**************************************************************************************************************
*/
typedef struct
{
	U32	  Num;
	U32   Ver[4];							//版本号
	U08	  Stat;
	U08	  rev[3];
	U08   Bin[60][12];		//	U08   Bin[45][10];
	U08   PurseDisc_BIN;	//折扣

	U08	  Rvs08Bit[85];				//保留字节 总共116字节
}__UPBinInfo;
//用户文件10  互联互通城市代码
typedef struct
{ 
	U32 Num;							//城市代码数量	
	U08 Ver[4];							//版本号
	U08 OthCityID[DEF_OthCityID_MaxNum][2];				
										//最多可以存储
	//=======>>
	U08	Rvs08Bit[20];					//保留字节 总共20字节
}__CityIDCfg;

typedef struct
{	
	U08 CardType;           			//卡类型
	U08 EnableSign;       				//月票钱包启用状态 
	U08 HolderCardSn;    				//持卡序号
	U08	CounterSn[4];             		//帐号
	U08 UPCashStat;						//0:未启用电子现金，非0:启用电子现金

	U08 YearChec_StaDate[4];			//年检开始时间
	U08 YearChec_EndDate[4];			//年检结束时间
	U08	BlackVer[4];            		//黑名单版本
}__CPU_CommInfo;	

typedef struct
{	                                
 	U08	CircuitryID[2];					//线路标识 
 	U08 PsamTID[6];						//终端机编号  只使用最后2字节，最后2字节用于存储车辆编号
 	U08 GpsVer[4];						//GPS版本号
 	U16 UpID;							//上车站点编号
 	U08 UpSN;							//上车序号
	U08 BillProcStat;					//是否执行过逃票处理，非0执行过，主要用于连刷判断处理，如果执行过连刷需要
										//读取倒数第二条记录，否则是读取倒数第一条主记录的。
	
	U08 Stat;							//交易状态  1未完成(上车)，2完成(下车), 0逃票
 	U08 UpDownStat;						//行驶标志 上行下行标志  1上行，2下行
// 	U08 StatEnd;						//上车下车标识  1上车，2下车
 	U32 Money;							//逃票金额
	U08 Time[7];						//上车时间
	U32 AllRange;						//上车行驶里程数 米
	U08	MotoEmpID[4];					//司机卡EMPID 实际3字节 前3字节
}__CPUM1_BillInfo; 

typedef struct                       
{
	U32 DealMoneyStat;					//交易金额输入状态  0空，1输入完成，2输入中，3输入中有加键
	U32	CurOldPurseBalance;				//钱包余额  交易前  主要月票/次卡当月余额使用
	U32	OldPurseBalance;				//钱包余额  交易前
	U32	NewPurseBalance;				//钱包余额  交易后
	U32	DealMoney;						//交易金额  本次交易金额
	U08 DealTime[8];					//交易时间  本次交易时间YYYYMMDDHHMMSS

	U32 UnitPrice;						//全价票价，当前应该使用的值,已经从高峰里提取出来了
										//分段收费时，此价为逃票金额

	U08 CardpPE[4];						//卡片钱包优先级  
										//[0]:高,[1]:中,[2]:低,	内容：1=电子钱包，2=月票，3=次卡 其它禁止
										//[3]:当前已经确定使用的钱包类型
	U08 CardPhyType;					//卡片物理号类型 1:CPU,2=M1,3=复合卡
	U08 CardTypeCout;					//卡类型所在票价卡的位置
	U08 CityCode[2];                 	//城市代码
	U08 LastCardPhySN[12];				//卡唯一序列号物理号，上一次校验成功的号
	U08	CardPhySN[12];					//卡唯一序列号物理号，当前的号
	U08 CardASN[8];						//卡应用序列号，当前卡
    U08 MakeCardId[8]; 
	U08 TTC[4];							//终端交易流水号

	U08	PullCTC[2];						//IC卡消费交易序号 消费初始化返回    圈存初始化返回
	U08 DebitCTC[2];	

	U08	MAC2[4];						//MAC2       IC卡交易成功返回的MAC2	 圈存初始化返回
	U08	TAC[4];							//交易验证码 IC卡交易成功返回的TAC	 圈存交易返回
	U08 Divisor[24]; 					//分散因子
	U32 Divisorlen;						//分散因子长度
	U08 Mtype;                          //主卡类型
}__TradeInformation;					// 卡片交易处理 共用数据单位定义 (存储卡与CPU卡共用)

//SAM卡应用层信息数据结构定义
typedef struct
{
	U08	PsamASN[12];		//PSAM卡号
	U08	PsamTID[8];			//终端机编号
	U08	PsamTTC[4];			//PSAM回应的终端交易序号
	U08	PsamIcc[4];			//PSAM回应的终端随机数
	U08	PsamMAC1[4];		//MAC1
	U08	PsamKeyVer;			//PSAM卡返回密钥版本
	U08	PsamKeyIndex;		//消费密钥索引号(从PSAM应用选择AID回应中得到)
	U08 PsamRvs[2];						//保留
}__SamAppInfo;

/*
**************************************************************************************************************
*【05】参数卡参数 存储于用户文件01
**************************************************************************************************************
*/
typedef struct
{ 
	U32 Ver;							//版本号 实际为2字节 终端初始化时为0  非0:终端机才可以使用
	U08 Time[8];						//时间

//=======>>12   
	U08	ComType;						//通讯类型"G"=GPRS,"C"=CDMA,"Z"=Zigbee,'T'=TCP,'M'=Modem,'A'=CAN,'R'=485,'W'=WIFI
										//'B'=Bluetooth，'U'＝USB,'I'=IrDA	
	U08	ZigbeeChannel;					//Zigbee信道设置
	U16 ComRvs;							//保留
	
	U08 NetIPAddr01[4];	 				//服务器IP01
	U08 NetIPAddr02[4];					//服务器IP02
	U08 NetIPAddr03[4];					//服务器IP03
	U08 NetIPAddr04[4];					//服务器IP04
	U16	NetIPProt01; 					//服务器端口01
	U16	NetIPProt02; 					//服务器端口02
	U16	NetIPProt03; 					//服务器端口03
	U16	NetIPProt04; 					//服务器端口04
	U08	NetAPN01[48];					//网络接入点01  ASCII   
	U08	NetName01[48];					//网络用户名01  ASCII  
	U08	NetPasd01[20];					//网络密码01    ASCII  	  
	U08	NetAPN02[48];					//网络接入点02  ASCII   
	U08	NetName02[48];					//网络用户名02  ASCII  
	U08	NetPasd02[20];					//网络密码02    ASCII 

	U08 NetTimeCont; 					//定时连接 默认值10分钟,小于5时按5分钟处理(单位分钟),正确取值5-255
	U08 NetCoutCont; 					//定量连接 默认值20条,小于5时此参数不生效,正确取值5-255(定时连接参数值大于30才生效)
										//上参数，平台工具需要自动根据“定时连接”参数来自动识别是否开启此项参数。
	U08 NetContTimeOut;					//连接超时时间 默认15S钟，小于10时按10S处理(单位S),正确取值10-255
	U08 NetTxRxTimeOut;					//通讯超时时间 默认25S钟，小于10时按10S处理(单位S),正确取值10-255
	U08 NetUARTTimeOut;					//串口超时时间 默认80ms,单位MS,小于50MS按50MS处理.目前保留.
	U08 GpsTimeCont;					//终端上传GPS的频率    取值 10-255 单位s   取值小于10默认为短连接
	U08 NetRvs[2];						//保留

//=======>>268
	U08 CardUnSel;						//复合卡应用选择 0：CPU优先 1：M1优先，默认CPU优先，其它值按CPU卡处理
	U08 CardABSel;						//TypeA/TypeB卡选择 0:只支持TypeA卡，1：只支持TypeB卡，3：A/B同时支持
										//默认值为0，其它值按0处理。
	U08 CardUnSak[2];					//复合卡SAK值 0：无效(使用默认值)，其它值有效；可以存储2组SAK值
										//默认值：0x38,0x38 
	U08 CardApps;						//TypeA卡PPS配置 0:禁用PPS，其它值启用PPS 默认值为0，禁用PPS
	U08 CardBpps;						//TypeB卡PPS配置 0:禁用PPS，其它值启用PPS 默认值为0，禁用PPS
	U08 Card7816pps;					//7816 pps配置 	 0:禁用PPS，其它值启用PPS 默认值为0，禁用PPS
	U08 CardRFcfgSta;					//射频模块配置状态 0:禁用手动配置，其它值启用手动配置 默认值为0，禁用手动配置
	U08 CardRFcfg[8];					//配置值，分别对应13,19,1b,1c其它暂时保留

//=======>>16
	U08 AppBusSel;						//终端支持卡业务选择 1:只支持市民卡,2:市民卡与银联卡匀支持
										//其它值:只支持市民卡,默认值为1.
	U08 AppBusPrior;					//优先等级 0:市民卡优先，1：银联卡优先，其它值：市民卡优先
										//默认值为0，市民卡优先  这个暂时不使用
	U08 AppBusRec;						//银联交易记录上传选择 
										//0:易记录只上传银联平台
										//1:交易记录只上传公交平台
										//2:交易记录银联平台与公交平台两边同时上传
										//其它值:按1处理
										//默认值为1,只传上传到公交平台
	U08 AppBusErrPro;					//终端异常处理 默认为0,当终端提示请重刷时,如果放上其它卡,按新卡处理.
										//其它值:异常处理超时时间,单位S,终端提示请重刷时,超时时间内必须等待上张卡过来.
	U16 AppBusMinBalanc;				//卡内余额预警 	0:不启用,非0:启用,当卡内余额低于此值时,交易完成后终端提示"请充值"
										//默认值为:500(5元)
	U08 AppDisSel;						//语言选择，默认值为:0汉语，其它值按多语音处理
	U08 AppDisLCD;						//显示屏选择：1:数码管，其它:液晶
	U16 AppHexDis;						//进制 大于1。如：人民币，此值为100。
										//票价卡里票价为200(分)，则终端机刷卡显示时，显示＝200/100=2.00，小数点固定为2位。
	U08 AppCityID[2];					//本地城市代码
		
//=======>>12
	U08 AudioStat;						//语音播放状态 	0:禁用语音提示 1:启用语音提示 默认值为1，启用
	U08 AudioVolume;					//语音音量 默认值为10，100%，最大值为50，最小值为1
	U08 AudioPwmStat;					//提示音(脉冲)状态 0:禁用
										//非0：启用，启用后在成功交易播放语音前自动添加脉冲音
										//默认值为：1，启用
	U08 AudioPwmf;						//脉冲音频率 取值：大于等于40,分别对于400－2550HZ频率输出 默认值为55
	U08 AudioPwmTim;					//脉冲音播放时间 取值：1－255，分别对于10-2550MS 默认值为：18
	U08 AudioRvs[3];

//=======>>8 
	U08 Tel01[8];						//咨询热线电话号码      左对齐，多余位补全F
	U08 Tel02[8];						//销售单位联系电话号码	左对齐，多余位补全F

//=======>>16
	U16	CarCode;						//车辆编号
	
	U08 BillTimeOut;					//分段收费上下车超时时间

	U08	Rvs08Bit[29];					//保留字节扩展
//=======>>32
										//合计364
}__SysCfg;

/*
**************************************************************************************************************
*【06】票价卡参数  存储于用户文件02
**************************************************************************************************************
*/
typedef struct
{
	U16	UnitPrice;						//票价
	U16	StaHHMM;						//开始时间 HHMM
	U16	EndHHMM;						//结束时间 HHMM
	U16 Rvs;							//保留
}__BusyPrice;		  					//8字节

typedef struct
{
	U16	UnitPrice;						//票价
	U16	StaMMDD;						//开始日期 MMDD
	U16	EndMMDD;						//结束日期 MMDD
	U16 Rvs;							//保留
}__BusyPrice3M;		  					//8字节

//单价，票价  交易参数
typedef struct
{
	U08	CardType;						//卡类别
	U08 TimeCout;						//连刷状态 0：不启用 非0：启用，数值表示连刷时间(单位分钟)
										//启用连刷功能后，第二次刷卡交易只能扣电子钱包里的钱，并且固定为全价。
	U16 CardStat;						//卡类型，启用，黑名单，优先级
										//B15:禁用标识        0禁用，1启用
										//B14:黑名单查询状态  0禁用，1启用
										//B13B12B11:次卡优先级  3位的组合，取值为0-7，0:禁用，数值越大优先级越高
										//B10B9B8:月票优先级  3位的组合，取值为0-7，0:禁用，数值越大优先级越高
										//B2B1B0:钱包优先级 3位的组合，取值为0-7，0:禁用，数值越大优先级越高
										//B4:高峰票价启用标识 0禁用,1启用
										//B5B6B7:保留
	U08	PurseDisc;						//钱包折扣 取值0-255
	U08	MonthDisc;						//月票折扣 取值0-255
	U16 Rvs;							//保留
	U08 AudioBuf[12];					//语音提示内容 最多5个汉字
	U08 DisBuf[12];						//显示内容	   最多5个汉字
}__DiscInfo;							//28字节

typedef struct
{    
	U32 Ver;							//版本号 实际为2字节 终端初始化时为0 非0:终端机才可以使用
	U08 Time[8];						//时间

//=======>>12  
	U08	FilialeID;						//分公司标识
	U08 Rvs[3];							//保留
	U08	CircuitryID[4];					//线路标识 

	U16 UnitPrice;						//普通票价,站点均票票价,里程单价
	U08 BusyPriceCout;					//高峰票价数 高4位表示季节票价数,低4位表示时间段票价数
	U08 CardTypeCout;					//票价种类   取值1-25

	U08 TimePriceStat;					//分段收费状态  0:终端不支持分段收费,其它值:支持分段收费
										//0:默认:不支持分段收费
										//1:按站收费设置每坐一站的收费情况，收费金额乘以坐的站点个数
										//2:按段收费设置坐不同距离的收费情况，如坐小于3站收费1元，大于3站小于5站收费2元
										//3:站站收费设置线路上不同站点之间的收费情况
										//4:里程收费里程*单价
										//5:里程区间
	
	U08 GPSStat;						//GPS状态 0:终端不支持GPS,其它值:支持GPS 默认为0，不支持GPS
	U08 GPSContTime;					//GPS上传时间间隔 0:不单独上传,其它值,按设定的值处理.单位10S.只上传GPS信息业务.
										//取值:1-255(10S-2550S),大于1分钟,短连接才生效,小于1分钟按1分钟处理.
	U08 GPSLinkStat;					//终端长连接/短连接 0:短连接,其它值:长连接 默认:短连接

//=======>>16
	__BusyPrice 	BusyPrice[3];		//高峰票价 
	__BusyPrice3M 	BusyPrice3M[2];		//季节高峰票价
	__DiscInfo		DiscInfo[25];		//单价,票价,交易参数

//=======>>740
	U16 FaultUnitPrice;					//分段收费逃票票价
	U08 Rvs08Bit[30];					//保留

//=======>>32					
}__DealCfg;	 							//合计800字节

/*
**************************************************************************************************************
*【07】司机签到相关	系统参数09区
**************************************************************************************************************
*/
typedef struct
{     
	U08	MotoState;						//司机卡状态，0:未签到，1:司机卡，2:公用司机卡
	U08	MotoCardPhyNoSize;				//司机卡物理卡号长度
	U08	MotoFilialeID[2];				//司机卡对应的分公司标识
 	U08	MotoName[16];					//司机卡姓名
	U08	MotoEmpID[4];					//司机卡EMPID 实际3字节 前3字节
	U08	MotoCardNO[8];					//司机卡卡号
	U08	MotoCardPhyNO[12];				//司机卡物理卡号
	U08	MotoTime[8];					//司机卡签到签退时间YYYYMMDDHHMMSS

	U32	MotoCardRecCout;				//司机卡当班记录总数
    U32	MotoCardRecMone;				//司机卡当班金额汇总
	U32	MotoCardNumCout;				//司机卡次卡交易计数
//=======>>60

	U32	ComKeyStat;						//通讯KEY状态，0:未开通默认值
	U08 ComKey[12];						//通讯KEY开通后获取的值
//=======>>16
	U32 M1SamDealCout;			  		//模拟CPU消费的SAM卡交易流水号，每消费一次加1

//=======>>20131012日增加8字节(UP_)
	U32	UP_MotoCardRecCout;				//司机卡当班银联记录总数
    U32	UP_MotoCardRecMone;				//司机卡当班银联金额汇总

	U08	Rvs08Bit[4];					//保留字节 总共84+8字节（不能超过配置大小）
}__OthCfg;

//========================>>MifareOne卡相关
//==============>>发行区01块，只放有用数据，所有卡都相同
typedef struct
{	       
	U08 CityID[2];        	 			//城市代码           
	U08 CallingID[2];   	 			//行业代码           
	U08 PublishSN[4];       			//发行流水号
	U08 CardTAC[4];       	 			//卡认证码         
	U08 CardEnableSign;     			//启用标记
	U08 CardType;           			//卡类型

	U08 EnableSign;       				//月票钱包启用状态
	U08 HolderCardSn;    				//持卡序号
	U08 NameState;                      //记名状态
}__M1_PublishBlack;

//==============>>公共信息区1,3块内容，只放有用数据，消费卡使用
typedef struct
{	 
//	U08 DealPoint;                		//交易记录指针
//	U16 SumDealCout;              		//钱包累计交易次数
//	U16 MonTickDealCout;          		//月票累计交易次数
//	U08 BlackStat;                		//黑名单标记状态
//	U16 SumAddCout;               		//钱包充值计数 取值0x000-0xFFFF
//	U16 SumMothCout;              		//月票充值计数 取值0x000-0xFFF
//	U16 SumNumCout;              		//次卡充值计数 取值0x000-0xFFF
//	U16 NumTickDealCout;          		//次卡累计交易次数

	U08 ComBuf[16];						//公共信息缓冲区

	U08 YearChec_StaDate[4];			//年检开始时间
	U08 YearChec_EndDate[4];			//年检结束时间
    U08	CounterSn[4];             		//帐号
	U08	BlackVer[4];            		//黑名单版本	  
}__M1_CommInfo;	
/*
**************************************************************************************************************
*										  变 量
**************************************************************************************************************
*/
extern  RTC_CLOCK   SYS_RTC_Time;	


//=============
extern unsigned int RTC_ReadSysTime( RTC_CLOCK *ptime );				//获取系统时间
extern unsigned int RTC_WriteSysTime( RTC_CLOCK *ptime );			//更新系统时间
#endif

